package admincow.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;

import admincow.util.ConexionBD;
import admincow.vo.BecerroVO;
import admincow.vo.VacaVO;

public class VacaDAO {

	// inicio
	public VacaVO obtenerPorRPVaca(String RPvaca) {
		VacaVO vo = new VacaVO();
		try {
			Connection con = ConexionBD.obtenerConexion();
			Statement stmt = con.createStatement();
			ResultSet rs = stmt
					.executeQuery("Select RPvaca,idraza,nombre,fech_nac,registro,fech_reg,RPpadre,RPmadre,etapa,estado,ordenio from vaca where RPvaca='"
							+ RPvaca + "'");
			if (rs.next()) {
				vo.setRPvaca(rs.getString("RPvaca"));
				vo.setIdraza(rs.getInt("Idraza"));
				vo.setNombre(rs.getString("Nombre"));
				vo.setFech_nac(rs.getString("Fech_nac"));
				vo.setRegistro(rs.getInt("Registro"));
				vo.setFech_reg(rs.getString("Fech_reg"));
				vo.setRPpadre(rs.getString("RPpadre"));
				vo.setRPmadre(rs.getString("RPmadre"));
				vo.setEtapa(rs.getString("Etapa"));
				vo.setEstado(rs.getString("Estado"));
				vo.setOrdenio(rs.getString("Ordenio"));
			}
			rs.close();
			stmt.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return vo;
	}

	public Collection<VacaVO> buscarPorNombre(String nombre) {
		String query = "Select RPvaca,idraza,nombre,fech_nac,registro,fech_reg,RPpadre,RPmadre,etapa,estado,ordenio from vaca where nombre like '%"
				+ nombre + "%'";
		Collection<VacaVO> c = new ArrayList<VacaVO>();

		try {
			Connection con = ConexionBD.obtenerConexion();
			Statement stmt = con.createStatement();
			ResultSet rs = stmt.executeQuery(query);
			while (rs.next()) {
				VacaVO vo = new VacaVO();
				vo.setRPvaca(rs.getString("RPvaca"));
				vo.setIdraza(rs.getInt("Idraza"));
				vo.setNombre(rs.getString("Nombre"));
				vo.setFech_nac(rs.getString("Fech_nac"));
				vo.setRegistro(rs.getInt("Registro"));
				vo.setFech_reg(rs.getString("Fech_reg"));
				vo.setRPpadre(rs.getString("RPpadre"));
				vo.setRPmadre(rs.getString("RPmadre"));
				vo.setEtapa(rs.getString("Etapa"));
				vo.setEstado(rs.getString("Estado"));
				vo.setOrdenio(rs.getString("Ordenio"));
				c.add(vo);
			}
			rs.close();
			stmt.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return c;
	}

	public VacaVO insertar(VacaVO vo) {
		System.out.println("Ingresando al insetar RPvaca");
		String query1 = "INSERT INTO vaca (RPvaca,idraza,nombre,fech_nac,registro,fech_reg,RPpadre,RPmadre,etapa,estado,ordenio) VALUES (?,?,?,?,?,?,?,?,?,?,?)";
		System.out.println(query1);
		try {
			Connection con = ConexionBD.obtenerConexion();
			PreparedStatement stmt = con.prepareStatement(query1);
			stmt.setString(1, vo.getRPvaca());
			stmt.setInt(2, vo.getIdraza());
			stmt.setString(3, vo.getNombre());
			stmt.setString(4, vo.getFech_nac());
			stmt.setInt(5, vo.getRegistro());
			stmt.setString(6, vo.getFech_reg());
			stmt.setString(7, vo.getRPpadre());
			stmt.setString(8, vo.getRPmadre());
			stmt.setString(9, vo.getEtapa());
			stmt.setString(10, vo.getEstado());
			stmt.setString(11, vo.getOrdenio());

			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo insertar");
			}

			stmt.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return vo;
	}

	public VacaVO actualizar(VacaVO vo) {
		System.out.println("Ingresando al actualizar RPvaca");
		String query1 = "UPDATE vaca SET  idraza=?,nombre=?,fech_nac=?,registro=?,fech_reg=?,RPpadre=?,RPmadre=?,etapa=?,estado=?,ordenio=? WHERE RPvaca=?";
		
		try {
			Connection con = ConexionBD.obtenerConexion();
			PreparedStatement stmt = con.prepareStatement(query1);
			
			stmt.setInt(1, vo.getIdraza());
			System.out.println(vo.getIdraza());
			
			stmt.setString(2, vo.getNombre());
			System.out.println(vo.getNombre() );
			
			stmt.setString(3, vo.getFech_nac());
			System.out.println(vo.getFech_nac() );
			
			stmt.setInt(4, vo.getRegistro());
			System.out.println(vo.getRegistro());
			
			stmt.setString(5, vo.getFech_reg());
			System.out.println(vo.getFech_reg() );
			
			stmt.setString(6, vo.getRPpadre());
			System.out.println(vo.getRPmadre() );
			
			stmt.setString(7, vo.getRPmadre());
			System.out.println(vo.getRPmadre() );
			
			stmt.setString(8, vo.getEtapa());
			System.out.println(vo.getEtapa());
			
			stmt.setString(9, vo.getEstado());
			System.out.println(vo.getEstado());
			
			stmt.setString(10, vo.getOrdenio());
			
			stmt.setString(11, vo.getRPvaca());
			System.out.println(vo.getRPvaca());

			
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo actualizar rpvaca");
			}

			stmt.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return vo;
	}

	public VacaVO codigo(String auto) {
		System.out.println("Estamos obteniendo el codigo vaca");
		VacaVO vi = new VacaVO();
		try {
			Connection con = ConexionBD.obtenerConexion();
			Statement stmt = con.createStatement();
			ResultSet rs = stmt
					.executeQuery("select (MAX(right(RPvaca,4))+1)as nro from vaca WHERE LEFT(RPvaca,4)='" + auto + "'");
		
			if (rs.next()) {
				vi.setRPvaca(rs.getString("nro"));
			}
			    System.out.println("El error esta ahi si no pasa esto");
				rs.close();
				stmt.close();
				con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return vi;
	}
	
	
	public void eliminar(String RPvaca) {
		String query = "DELETE FROM vaca WHERE RPvaca=?";
		
		try {
			Connection con = ConexionBD.obtenerConexion();
			PreparedStatement stmt = con.prepareStatement(query);
			stmt.setString(1, RPvaca);
			int i = stmt.executeUpdate();
			if (i != 1) {
				throw new SQLException("No se pudo eliminar Vaca");
			}
			stmt.close();
			con.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}

}
